//路由鉴权，鉴权项目当中的路由能不能被访问的权限的设置（某一个路由什么条件下可以访问）
import router from '@/router'
import setting from './setting.ts'
import nprogress from 'nprogress'
//引入进度条的样式
import "nprogress/nprogress.css"
nprogress.configure({showSpinner:false})
//获取用户相关的小仓库内部token数据，去判断用户是否登陆成功
import useUserStore from "./store/modules/user.ts";
import pinia from './store'
// let useStore = useUserStore(pinia)
// console.log(useStore)
//全局首位：项目当中任意路由切换都会出发的钩子
//全局前置守卫

router.beforeEach(async (to:any,from:any,next:any) => {
    document.title = `${setting.title} - ${to.meta.title}`
    //to:你将要访问哪个路由
    //form:你从哪个路由而来
    //next:路由的放行函数
    //访问某一个路由之前守卫
    nprogress.start()
    let userStore = useUserStore()
    //获取token，去判断用户登录还是未登录
    let token = userStore.token
    //获取用户名字
    let username = userStore.username
    //用户登录判断
    if(token){
        //登录成功，访问login，不能访问，指向首页
        if(to.path == '/login'){
            next({path: '/'})
        }else{
            //登陆成功，访问其余的六个路由（登陆排除）
            if(username){
                //放行
                next()
            }else {
                //如果没有用户信息，在守卫这里发请求获取到了用户信息再放行
                try {
                    //获取用户信息之后再放行
                    await userStore.userInfo()
                    next()
                } catch (e) {
                    //token过期：获取不到用户信息
                    //用户手动修改本地存储token
                    //退出登录->用户相关的数据清空
                    userStore.userLogout()
                    next({path: '/login',query:{redirect:to.path}})
                }
            }
        }
    }else{
        //用户未登录判断
        if(to.path == '/login'){
            next()
        }else {
            next({path:'/login',query:{redirect: to.path}})
        }
    }
})
//全局后置守卫
router.afterEach((to:any,from:any) => {
    nprogress.done()
})


//第一个问题：任意路由切换实现进度条业务 ---nprogress
//第二个问题：路由鉴权（路由组件访问权限的设置）


//用户未登录：可以访问login，其余六个路由不能访问（只想login）
//用户登陆成功：不可以访问login[指向首页]，其余的路由可以访问